// 1秒后输出10个10.循环体变量i会渗透到循环体外部，所以在setTimeout 1秒的过程中，1的值实质变成了10，因此会在1秒后输出10个10。
for (var i = 0; i < 10; i++) {
    setTimeout(() => {
        console.log(i)
    }, 1000);
}

// 因为let是块级作用域，仅局限于for循环体内部，所以不会渗透到循环体外部。
for (let i = 0; i < 10; i++) {
  setTimeout(() => {
    console.log(i)
  }, 1000);
}


//立即执行函数将迭代器变量的作用域保护起来
for (var i = 0; i < 10; i++) {  
    (function(j) {
        setTimeout(() => {
            console.log(j)
        }, 1000);
    })(i)
}